package com.wei.czz.common.dto.admin;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.wei.czz.common.tool.BaseEntity;
import lombok.*;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.TreeSet;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2022-08-16 23:09:25
 * className: DeptDto 系统部门数据封装类
 * version: 1.0
 * description:
 * 	`@JsonInclude(JsonInclude.Include.NON_NULL)`：接口返回对象时，如果某个字段值为空，序列化不操作该字段
 */
@Getter
@Setter
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DeptDto extends BaseEntity implements Comparable<DeptDto> {

	/**
	 * 主键
	 */
	private String id;

	/**
	 * 父级主键
	 */
	private String parentId;

	/**
	 * 父级部门路径（存储所有父级部门id，‘-’分割）
	 */
	private String parentPath;

	/**
	 * 部门名称
	 */
	private String name;

	/**
	 * 业务类型
	 */
	private Integer businessType;

	/**
	 * 业务类型名称
	 */
	private String businessTypeName;

	/**
	 * 排序等级
	 */
	private Integer sort;

	/**
	 * 状态[0-可用 1-禁用]
	 */
	private Integer status;

	/**
	 * 状态名称
	 */
	private String statusName;

	/**
	 * 状态[true-禁用 false-可用]
	 */
	private Boolean disabled;

	/**
	 * 更新时间
	 */
	private Date updateTime;

	/**
	 * 操作更新的用户
	 */
	private String updateUser;

	/**
	 * 创建时间
	 */
	private Date createTime;

	/**
	 * 操作创建的用户
	 */
	private String createUser;

	/**
	 * 子部门数据集合
	 */
	private TreeSet<DeptDto> children;

	/**
	 * 部门数据键（用于唯一标识该部门）
	 * 部门结构树中，可能存在多条相同数据部门，使用该值唯一标识，否则前端渲染时，根据id作为唯一标识，会报唯一键重复
	 * 雪花主键值
	 */
	private String dataKey;

	@Override
	public int compareTo(DeptDto o) {
		int val = sort.compareTo(o.getSort());
		if (val == 0) {
			val = createTime.compareTo(o.getCreateTime());
			if (val == 0) {
				val = Long.valueOf(id).compareTo(Long.valueOf(o.getId()));
			}
		}
		return val;
	}

}
